package sys

import (
	"github.com/gin-gonic/gin"
	"handitem/xxb-gin-web/commons/response"
	"handitem/xxb-gin-web/global"
	req "handitem/xxb-gin-web/model/comms/request"
	resp "handitem/xxb-gin-web/model/comms/response"
	"handitem/xxb-gin-web/model/sys"
	"strconv"
	"strings"
)

type SysRolesApi struct{}

// 保存
func (e *SysRolesApi) SaveData(c *gin.Context) {
	// 1: 第一件事情就准备数据的载体
	var xkBbs sys.SysRoles
	err := c.ShouldBindJSON(&xkBbs)
	if err != nil {
		// 如果参数注入失败或者出错就返回接口调用这。出错了.
		response.FailWithMessage(err.Error(), c)
		return
	}
	// 创建实例，保存帖子
	err = sysRolesService.SaveSysRoles(&xkBbs)
	// 如果保存失败。就返回创建失败的提升
	if err != nil {
		response.FailWithMessage("创建失败", c)
		return
	}
	// 如果保存成功，就返回创建创建成功
	response.Ok("创建成功", c)
}

// 修改
func (e *SysRolesApi) UpdateById(c *gin.Context) {
	// 1: 第一件事情就准备数据的载体
	var sysUser sys.SysRoles
	err := c.ShouldBindJSON(&sysUser)
	if err != nil {
		// 如果参数注入失败或者出错就返回接口调用这。出错了.
		response.FailWithMessage(err.Error(), c)
		return
	}

	err = sysRolesService.UpdateSysRoles(&sysUser)
	// 如果保存失败。就返回创建失败的提升
	if err != nil {
		response.FailWithMessage("更新失败", c)
		return
	}
	// 如果保存成功，就返回创建创建成功
	response.Ok("更新成功", c)
}

// 根据id删除
func (e *SysRolesApi) DeleteById(c *gin.Context) {
	// 绑定参数用来获取/:id这个方式
	id := c.Param("id")
	// 开始执行
	parseUint, _ := strconv.ParseUint(id, 10, 64)
	err := sysRolesService.DelSysRolesById(uint(parseUint))
	if err != nil {
		response.FailWithMessage("删除失败", c)
		return
	}
	response.Ok("ok", c)
}

// 批量删除
func (e *SysRolesApi) DeleteByIds(c *gin.Context) {
	// 绑定参数用来获取/:id这个方式
	ids := c.Query("ids")
	// 开始执行
	idstrings := strings.Split(ids, ",")
	var sysUsers []sys.SysRoles
	for _, id := range idstrings {
		parseUint, _ := strconv.ParseUint(id, 10, 64)
		sysUser := sys.SysRoles{}
		sysUser.ID = uint(parseUint)
		sysUsers = append(sysUsers, sysUser)
	}
	err := sysRolesService.DeleteSysRolesByIds(sysUsers)
	if err != nil {
		response.FailWithMessage("删除失败", c)
		return
	}
	response.Ok("ok", c)
}

// 根据id查询信息
func (api *SysRolesApi) GetById(c *gin.Context) {
	// 根据id查询方法
	id := c.Param("id")
	// 根据id查询方法
	parseUint, _ := strconv.ParseUint(id, 10, 64)
	sysUser, err := sysRolesService.GetSysRolesByID(uint(parseUint))
	if err != nil {
		global.SugarLog.Errorf("查询用户: %s 失败", id)
		response.FailWithMessage("查询用户失败", c)
		return
	}

	response.Ok(sysUser, c)
}

// 分页查询信息
func (api *SysRolesApi) LoadSysRolesPage(c *gin.Context) {
	// 创建一个分页对象
	var pageInfo req.PageInfo
	// 把前端json的参数传入给PageInfo
	err := c.ShouldBindJSON(&pageInfo)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}

	xkBbsPage, total, err := sysRolesService.LoadSysRolesPage(pageInfo)
	if err != nil {
		response.FailWithMessage("获取失败"+err.Error(), c)
		return
	}

	response.Ok(resp.PageResult{
		List:     xkBbsPage,
		Total:    total,
		Page:     pageInfo.Page,
		PageSize: pageInfo.PageSize,
	}, c)
}
